package com.googlecode.bindyj;

import org.hamcrest.Matcher;

import com.googlecode.bindyj.function.Func;
import com.googlecode.bindyj.property.Property;

public interface PipelineBuilder<This extends PipelineBuilder<This>> {
  This append(PipelineStep step);

  This convert(Func<?> converter);

  This format(String message);

  This group(BindGroup group);

  This log(int level, String message);

  This validate(Func<Boolean> validator);

  <T> This validate(Func<T> attribute, Matcher<? super T> condition);

  This validate(Matcher<?> condition);

  This toProperty(Object target, Property property);

  This toFunc(Func<?> func);

  Func<Void> runner(Func<?> toCall);

  void watch(Func<?> runner);
}
